public class 回溯T1 {
    //二维列表存储结果(成员)
    static List<List<Integer>> list = new ArrayList<>();
    public static void main(String[] args) {
        //输入
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] v=new int[n+1];
        List<Integer> res = new ArrayList<>();
        //运行
        dfs(n,v,res);
        //输出
        for(List<Integer> x:list) {
            for(int y:x) {
                System.out.print(y+" ");
            }
            System.out.println();
        }
    }
    public static void dfs(int n,int[] v,List<Integer> res) {
        //递归跳出的条件
        if(res.size()==n) {
            list.add(new ArrayList<>(res));
            return;
        }
        for(int i=1;i<=n;i++) {
            //如果为1跳过
            if(v[i]==1) continue;
            //否则继续
            res.add(i);
            v[i]=1;
            dfs(n,v,res);
            //回的过程（得一个一个删除)
            res.remove(res.size()-1);
            v[i]=0;
        }
    }
}

